var TPL_INCOMING_HOUR 		= '<dl><dt><time class="time">#{at_copy} #{hour}</time></dt><dd><ul class="brand-names">#{element_list}</ul></dd></dl>';
var TPL_INCOMING_CAMPAIGN 	= '<li id="campaign-#{campaign_number}" class="campaign">#{campaign_name}</li>';
var TPL_FANSHOP_CAMPAIGN 	= '<li id="campaign-#{campaign_number}" class="fanshop-campaign"><span class="fan-shop-link">#{fanshop_copy}:</span> <a title="#{campaign_name}" target="_blank" href="#{url}">#{campaign_name}</a></li>';
var TPL_CAMPAIGN_TIMER 		= '<time id="campaign-timer-#{campaign_counter}" class="campaign-timer"></time>';// For discussion and comments, see: http://remysharp.com/2009/01/07/html5-enabling-script/ (credit to @jdalton for minif)

var PrivaliaMicrositesJsonIndex = Class.create(CestaVipMain, {
//var PrivaliaMicrositesJsonIndex = Class.create(PrivaliaCore, {
	initialize: function($super) {
		$super();

		this.b_iphonePK = 				false;					// indica si la campanya es solo para iphone
		this.idStoreClosed =			'storeClosed';			// imagen de tienda cerrada

		this.vHumanDays =				[];

		this.sizeFilterAvailable = 		0;
		this.b_Installments =			false;					// flag boolean para saber si hay parcelados en la campanya
		this.currentTooltipElement =	'';

		this.i_campaignCounter	=		0;
		this.idNextCampaigns = 			'incoming-campaigns';
		this.idNextCampaignsTooltip = 	'campaignLogoTooltip';

		this.v_logoImgs	=				[''];
		this.i_campaignTimerCounter	=		0;

		this.idUserMsg = 				'userMsg';				//id que identifica el mensaje para usuario
		
		// promociones campanyas
		this.cssCampaignRow =			'js-campaign-row';
		this.cssCampaignRowHigh =		'js-campaign-row-high';
		this.cssCampaignPromo =			'js-campaign-promo';
		
		// ID diferentes campanyas activas
		this.today = 		"today";					//id que identifica la seccion de Hoy estrenamos
		this.currently = 	"currently";				//id que identifica la seccion de Actualmente
		this.lastday = 		"lastday";					//id que identifica la seccion de Ultimo dia
		this.fanshop = 		"fanshop";					//id que identifica la seccion de Fanshop
		this.installments = "js-installments";				//id que identifica la seccion de Parcelados. Solo BR
		
		// ID diferentes Zona Mobile y Social Media
		this.idOrderZonaMobile = "order_mobile_zone";			//id que controla donde se va a volcar el contenido segun el order
		this.idOrderSocialMedia = "order_social_media";			//id que controla donde se va a volcar el contenido segun el order
		this.idZonaMobile = "mobile_zone";			//id que controla si se muestra el bloque zona mobile
		this.idSocialMedia = "social_media";			//id que controla si se muestra el bloque social media
		this.idFacebook = "box-facebook";							//id facebook
		this.idShowFacebook = "js-show-facebook";		
		this.idSeparation = "js-separation";		//id separacion		
		this.classAsideLink = ".aside_link";					//identifica todos los enlaces que tiene la siguiente clase para mostrar o no el enlace
		
		//Modal promociones member action
		this.idMemberName = "js-member-name";		//id para volcar el nombre del socio
		this.idLinkMicrosite =	"js-linkmicrosite"; //id para volcar la url del escaparate
		
		this.url_microsite	= URL_DOMAIN + '/microsites/index';	// url escaparate
		this.o_modalPromotion = {}	//objeto donde almacenamos la modal
		
		this.v_ItemLine =	{'campaigns_today':'1','campaigns_active':'2', 'campaigns_lastday':'2', 'campaigns_fanshop':'1'};			// array para guardar items por linea
		
		this.vTypePromotion =	{'1':'js-special','2':'js-promotion', '3':'js-social'};			// array que controla el estilo de las barras de promociones
		
		//Campanyas adultos
		this.noLink =				'adultnolink';
	   	
	},
		/**
	 * Comprueba si se esta accediendo a la web mediante un dispositivo diferente a un ordenador
	 */
	checkUserAgent: function(agent) {
		// recogemos y pasamos el useragent a minusculas para evitar el key sensitive
		var s_agent = navigator.userAgent.toLowerCase();

		// busca el useragent, si es diferente de -1 es que existe sino no existe
		// indexOf por defecto devuelve la posicion que ocupa la palabra en la string que la contiene si coincide el useragent
		if(s_agent.indexOf(agent)!= -1){
			return s_agent;
		}
   	 },
	/**
	 * Metodo que transforma segundos en dias, horas, minutos y segundos
	 * @param {Object} seconds - input de segundos
	 * @param {Object} daysRequired - 0 para resultado sin dias, 1 para resultado con dias
	 */
	getExpiresTime: function(seconds, daysAndHoursRequired){
		var timeInDays = '',
		numdays = Math.floor(seconds / 86400), // Dias
		numhours = 0,
		numminutes = 0,
		numseconds = ((seconds % 86400) % 3600) % 60; // Segundos

		// Horas
		if(Math.floor((seconds % 86400) / 3600) < 10){
			numhours = "0" + Math.floor((seconds % 86400) / 3600);
		}else{
			numhours = Math.floor((seconds % 86400) / 3600);
		};
		// Minutos
		if(Math.floor(((seconds % 86400) % 3600) / 60) < 10 ){
			numminutes = "0" + Math.floor(((seconds % 86400) % 3600) / 60);
		}else{
			numminutes = Math.floor(((seconds % 86400) % 3600) / 60);
		}

		// Volcado, diferenciando si se requieren dias y horas
		if (daysAndHoursRequired == 1){
			if (numdays == 1){
				timeInDays += numdays + ' ' + this.getTxt('day') + ', ' + numhours + this.getTxt('h');
			}else if(numdays != 0){
				timeInDays += numdays + ' ' + this.getTxt('days')+', ' + numhours + this.getTxt('h');
			}else{
				timeInDays += numhours + this.getTxt('h');
			}
			return	timeInDays += ' ' + numminutes + this.getTxt('min');
		}else{
		return	timeInDays +=  numminutes +":"+ numseconds;
		}
	},
	/**
	 * Pueden haber campanyas con promociones (el texto q sale encima de la campanya)
	 * este metodo ajusta las filas para alinear horizontalmente las campanyas
	 */
	adjustPromotionPadding: function () {
		$$('.' + this.cssCampaignRow).each(function(row) {
			var v_campaigns = row.childElements();
			v_campaigns.each(function(campaign) {
				if(campaign.hasClassName(this.cssCampaignPromo)) {
					row.addClassName(this.cssCampaignRowHigh);
				}
			}, this);
			
		}, this);
		
	},

	/**
	 *  Construye la pagina con los datos pasados por json previamente
	 */
	buildPage: function(generate) {
		console.log("Generando sección:"+generate);
		switch(generate) {
			case 'campaigns_list':
				//Muestra solo la seccion donde hay campanyas
				var data = this.getAjaxData();
				this.getCampaignActive(data);

				//Tienda cerrada
				if (this.checkIfStoreClosed(data)) {
					this.showStoreClosed();
				}
				else {
					this.htmlGenerate({
						pushData: this.pushCampaigns
					});				
					
					// alinear las campanyas que puedan o no tener el texto-promo
					this.adjustPromotionPadding();
					
					//quitar link campanya adultos franja horaria no legal
					this.hideLinkCampaignAdult();
					
					this.setCampaignTimers();
				}
				break;

			case 'high_light':
				
				var data = this.getAjaxData();
				
				this.htmlGenerate({
					pushData: this.pushHighLight
				});

				//Muestra el mensaje al usuario
				this.setUserMsg(data);
				
				//Mostrar y volcado modal promociones
				this.transferModalPromotion(data);
				
				//debe de ser despues del volcado
				Cufon.replace('h1');
				
				break;	

			case 'next_campaigns':
				this.htmlGenerate({
					pushData: this.pushNextCampaigns
				});
				// En caso de no haber campanyas, ocultamos la seccion de proximamente
				if (this.getAjaxData().next_campaigns.length !== 0){
					this.showIncomingCampaigns();
					this.getCampaignLogoTooltip();
				}
				break;
				
			case 'aside_info':
				//ZONA MOBILE Y SOCIAL MEDIA
				var data = this.getAjaxData();
				if (data != null){
					//Seccion Parcelados
					
					
					//Mostrar las secciones segun el orden que nos pasan
					this.showOrderSection(data);

					//Ocultar seccion
					this.hideSections(data);
					
					
				}
				this.htmlGenerate({
					pushData: this.pushAsideInfo
				});
				//Una vez se ha volcado la informacion se oculta las etiquetas "a" donde no hay enlaces
				this.showLinks();
				
				break;
			default:
				this.generateHtml();
				break;
		}
	},
	
	/**
	 * cada X ha de hacer un salto de linea (clear), y quitar padding derecha
	 */
	breakLine: function(dataJson, index, itemsPerLine) {
		if((index+1) % itemsPerLine == 0) {
			// hacemos salto linea
			// poner clear
			dataJson.cerrardiv = '</div>';
			dataJson.clear = '<div class="clear"></div>';
			// quitar padright
		}
		else {
			// poner padright
			dataJson.anyadirdiv = '<div class="'+ this.cssCampaignRow +'">';
			dataJson.padding = 'marright10';
		}
		return dataJson;
	},
	
	
	/**
	 * Comprueba que no hayan campanyas
	 */
	checkIfStoreClosed: function (data) {
		if ( !Object.isUndefined(data.campaigns_fanshop) && !Object.isUndefined(data.campaigns_today) && !Object.isUndefined(data.campaigns_active) && !Object.isUndefined(data.campaigns_lastday) ){
			return (this.getQuantityCampaign(data.campaigns_fanshop) == 0) && (this.getQuantityCampaign(data.campaigns_today) == 0) && (this.getQuantityCampaign(data.campaigns_active) == 0) && (this.getQuantityCampaign(data.campaigns_lastday) == 0);
		}
	},
	
	/**
	 * Comprueba que exista el bloque Zona Mobile
	 */
	checkIfBlockMobileZone: function (data) {
		return ( (data.mobile_zone.bottom.show == "hidden") && (data.mobile_zone.header.show == "hidden") && (data.mobile_zone.middle.show == "hidden") && (data.mobile_zone.top.show == "hidden") );
	},
	
	/**
	 * Comprueba que exista el bloque Zona Mobile
	 */
	checkIfBlockSocialMedia: function (data) {
		return ( (data.social_media.bottom_left.show == "hidden") && (data.social_media.bottom_right.show == "hidden") && (data.social_media.header.show == "hidden") && (data.social_media.top.show == "hidden") );
	},
	
	/**
	 * Cierra la modal
	 */
	closeModalPromotion: function (){
		this.modalPromotion.close();
		this.o_modalPromotion = null;
	},
	
	/**
	 * Ocultar la campanya adulto en franja horaria no correcta
	 */
	campaignAdult: function(dataJson) {
		dataJson.campaignadult = "";
		if (!dataJson.slot_active){
			//opacidad capa contenedora campanya adulto
			dataJson.campaignadult = "hideadult disable";
			//asignar clase al enlace de campanya adulta para deshabilitarlo
			dataJson.adultnolink = "adultnolink";			
		}
		return dataJson;
	},
	
	/**
	 * Si hay campanyas activas. Se muestra la seccion
	 */
	getCampaignActive: function (data) {
		//Si existe el objeto y campanyas activas
		if ( !Object.isUndefined(data.campaigns_fanshop) && (data.campaigns_fanshop.length != 0) && ($(this.fanshop) != null)){
			$(this.fanshop).removeClassName('hidden');
		}
		if( !Object.isUndefined(data.campaigns_today) && (data.campaigns_today.length != 0) && ($(this.today) != null) ){
			$(this.today).removeClassName('hidden');
		}
		if( !Object.isUndefined(data.campaigns_active) && (data.campaigns_active.length != 0) && ($(this.currently) != null) ) {
			$(this.currently).removeClassName('hidden');
		}
		if ( !Object.isUndefined(data.campaigns_lastday) && (data.campaigns_lastday.length != 0) && ($(this.lastday) != null) ){
			$(this.lastday).removeClassName('hidden');
		}
	},

	/**
	 * Muestra Tooltip del Logotipo de campanyas en Proximamente
	 */
	getCampaignLogoTooltip: function(){
		// controlamos el comportamiento del tooltip
		this.nextCampaignTooltipControl();
		// recogemos las campaigns
		var v_incomingCampaigns = $$("#incoming-campaigns li");
		//Identificamos el producto y pasamos su posicion
        v_incomingCampaigns.each(function(item){
            item.observe('mouseover', (function(){
				var idCampaign = item.identify();
				
            }).bind(this));
            item.observe('mouseout', (function(){
            	CampaignLogoTooltip.closeTooltipNextCampaigns();
            }));
        }, this);
	},
	
	/**
	 * Devuelve la cantidad segun la campanya que le pases como parametro
	 */
	getQuantityCampaign: function (objecto) {
		if( !Object.isUndefined(objecto)){
			return objecto.length;
		}

	},
	
	/**
	 * Obtener item a partir campanya
	 */
	getItem: function(s_campanya) {
		if (s_campanya != ""){
			return this.v_ItemLine[s_campanya];
		}
	},

	/**
	 * Devuelve el dia de la semana a partir de un numero
	 * @param {Object} day
	 */
	getDayHuman: function (day) {
		var humanday = "";

		if(day >= 0 && day <= 7) {
			humanday = this.vHumanDays[day];
		}

		return humanday;
	},	
	
	/**
	 * Obtener literal a partir de promo_type, entero
	 */
	getTypePromotion: function(i_promotion) {
		if (i_promotion != ""){
			return this.vTypePromotion[i_promotion];
		}
	},
	
	/**
	 * Metodo para el volcado de los contenedores que contendran los contadores de tiempo
	 * de las campanyas
	 * @param {Object} tplTimer - template de los contenedores
	 */
	getTimerContainer: function(tplTimer){
		var html = tplTimer.evaluate({
			campaign_counter: this.i_campaignTimerCounter
		});
		this.i_campaignTimerCounter += 1;

		return html;
	},
		
	/**
	 * Muestra la seccion 
	 */
	hideSections: function(data) {
		//Ocultar social media porque esta todo oculto, es decir show=hidden. Mostrar solo facebook
		if ( !Object.isUndefined(data.social_media) && (data.social_media != null) && (data.social_media.length != 0) ){						
			if ( this.checkIfBlockSocialMedia(data) ){
				if (this.idSocialMedia != null) {
					$(this.idSocialMedia).addClassName('hidden');
					//Si social media esta vacio se muestra el facebook
					if ( ($(this.idFacebook) != null) && ($(this.idShowFacebook) != null) ) {
						var htmlFacebook = $(this.idFacebook).innerHTML;
						$(this.idShowFacebook).update(htmlFacebook);
						$(this.idShowFacebook).removeClassName('hidden');
						if ($(this.idSeparation) != null){
							$(this.idSeparation).removeClassName('hidden');
						}
					}
				}
			}
		}
		//Ocultar la zona mobile porque esta todo oculto, es decir show=hidden
		if ( !Object.isUndefined(data.mobile_zone) && (data.mobile_zone != null) && (data.mobile_zone.length != 0) ){
			if ( this.checkIfBlockMobileZone(data) ){
				if ($(this.idZonaMobile) != null){
					$(this.idZonaMobile).addClassName('hidden');
				}
			}
		}
	},
	
	/**
	 * quitar link campanyas adultos - Por defecto estan todas a true excepto campaign adulto false(inactivo) hasta 
	 * franja horaria correcta que se activa
	 */
	
	hideLinkCampaignAdult: function() {
		$$('.' + this.noLink).each(function(link) {
			link.writeAttribute("title", '');
			link.writeAttribute("href", 'javascript:;');
		});
	},
	
	/**
	 * Comprobar si campanya esta cerrada
	 */
	isCampaignClose: function () {
		var code = this.getResTextcodes(),
		codeCampaignClose = "msg0320002", // codigo campanya cerrada
		campaignOpen = true;

		if(code == codeCampaignClose) {
			campaignOpen = false; 			//campanya cerrada -> lanzar modal
			modalCampaignClose.open();
		}
		return campaignOpen;
	},

	/**
	 * Controla el comportamiento del tooltip de proximas campaynas segun la accion del usuario
	 */
	nextCampaignTooltipControl: function(){
		$(this.idNextCampaignsTooltip).observe('mouseover', (function(){
			CampaignLogoTooltip.showTooltipNextCampaigns();
		}));
		$(this.idNextCampaignsTooltip).observe('mouseout', (function(){
         	CampaignLogoTooltip.closeTooltipNextCampaigns();
        }));
		document.observe('click', (function(){
         	CampaignLogoTooltip.closeTooltipNextCampaigns();
        }));
	},
	
	/**
	 * Muestra una franja de diferente color segun el tipo de promocion que nos pasen, (promotion, special o social)
	 */
	promotionSpecial: function(dataJson,index) {
		
		if( !Object.isUndefined(dataJson.promo_active) && !Object.isUndefined(dataJson.promo_type) && !Object.isUndefined(dataJson.promo_text) ){
			
			if (dataJson.promo_active) {
				
				if ( ( (dataJson.promo_text != "") || (dataJson.promo_text != null) ) ){
					//conversion entero a literal para convertirlo en css
					if (dataJson.promo_type != ""){
						var txtTypePromotion = this.getTypePromotion(dataJson.promo_type);
						dataJson.hidePromotion = "colour "+txtTypePromotion;
					}
					else {
						dataJson.hidePromotion = "colour";
					}
					dataJson.promotion = this.cssCampaignPromo;
					
					
					dataJson.campaign_text_promotion = dataJson.promo_text;				
				}
			}
			else {
				//dataJson.hidePromotion = "hidden";
			}
			
		}
	
		return dataJson;
	},
		
	/**
	 * Volcado de datos del bloque Campanyas activas (fanshop, hoy estrenamos, actualmente y ultimo dia)
	 */
	pushCampaigns: function (dataJson, index) {
		var target = this.getTarget(),
		tplTimer = new Template(TPL_CAMPAIGN_TIMER);

		// Volcamos los contenedores de los contadores
		dataJson.campaign_timer_container = this.getTimerContainer(tplTimer);

		//Muestra la palabra Solo y el icono timer today de la campanya Hoy estrenamos
		dataJson = this.showTextOnly(dataJson, target);	

		//Muestra enlace Ir de Shopping o Entrar en Fan Shop
		dataJson = this.showBtnTxtFanShop(dataJson, target);

		// etiqueta promo
		dataJson = this.promotionSpecial(dataJson,index);

		// salto de linea + padding
		dataJson = this.breakLine(dataJson, index, this.getItem(target));

		// campanyas adultos
		dataJson = this.campaignAdult(dataJson);

		// sumo datos a volcar
		this.addBuilt(dataJson);

	},
	
	/**
	 * Volcado de datos del bloque 
	 */
	pushHighLight: function (dataJson){
		//sumo datos a volcar
		this.addBuilt(dataJson);
	},
	
	/**
	 * Volcado de datos del bloque Zona Mobile, Social Media
	 */
	pushAsideInfo: function (dataJson, index) {
		var target = this.getTarget();	
		
		if (target == "social_media") {
			
			//vector con las claves de los diferentes objetos
			var v_keys = Object.keys(dataJson);
			
			var oValues = Object.values(dataJson);			
			
			//muestra titulo con enlace o sin enlace
			this.showHeader(dataJson, v_keys, oValues);
			
		}
		if (target == "mobile_zone") {		
			//vector con las claves de los diferentes objetos
			var v_keys = Object.keys(dataJson);
			
			var oValues = Object.values(dataJson);	
			
			//muestra titulo con enlace o sin enlace
			this.showHeader(dataJson, v_keys, oValues);
			
		}
		// sumo datos a volcar
		this.addBuilt(dataJson);

	},
	
	/**
	 * Volcado de datos del bloque Proximamente
	 */
	pushNextCampaigns: function (dataJson, index) {
		var target = this.getTarget();

		if(target == "next_campaigns") {

			// Set-Up de variables necesarias
			var element_list = '',
			hour_list = '',
			hourHTML = '',
			tplHours = new Template(TPL_INCOMING_HOUR);
			var tmpHour = '';
			for(var i=0, l =dataJson.length; i<l; i+=1){

				dataJson.dayandmonth = dataJson[i].daymonth;
				dataJson.dayofweek = dataJson[i].weekday;
				// Obtenemos las campanyas que se lanzaran en cada hora
				element_list = '';
				element_list = this._getIncomingCampaigns(dataJson[i], i);
				// si la hora de las dos campanyas consecutivas coinciden no mostramos la hora
				if(tmpHour == dataJson[i].hours)
				{
					// Mostramos las campanyas y la informacion sin hora
					hourHTML = tplHours.evaluate({
						at_copy: '',
						hour: '',
						element_list: element_list
					});
				}
				else{

					// Mostramos las campanyas y la informacion
					hourHTML = tplHours.evaluate({
						at_copy: this.getTxt('at'),
						hour: dataJson[i].hours + 'h',
						element_list: element_list
					});
				}
				hour_list += hourHTML;
				// nos guardamos la hora de la campanya para comprarala con la siguiente campanya
				var tmpHour = dataJson[i].hours;

			}

			// Para cada dia, mostramos el dia de la semana correspondiente
			switch (dataJson.dayofweek){
				case 1:
					dataJson.dayofweek = this.getTxt('sun');
					break;
				case 2:
					dataJson.dayofweek = this.getTxt('mon');
					break;
				case 3:
					dataJson.dayofweek = this.getTxt('tue');
					break;
				case 4:
					dataJson.dayofweek = this.getTxt('wed');
					break;
				case 5:
					dataJson.dayofweek = this.getTxt('thu');
					break;
				case 6:
					dataJson.dayofweek = this.getTxt('fri');
					break;
				case 7:
					dataJson.dayofweek = this.getTxt('sat');
					break;
				default:
					break;
			}
			// Lo volcamos todo a una variable presente en la template
			dataJson.hour_list = hour_list;
		}

		// sumo datos a volcar
		this.addBuilt(dataJson);
	},
	
	/**
	 * Definir y guardar el objeto de tipo Modal
	 */
	setModalPromotion: function (o_modal){
		this.modalPromotion = o_modal;
	},
	
	/**
	 * Muestra la imagen de tienda cerrada
	 */
	showStoreClosed: function () {
		if($(this.idStoreClosed) != null) {
			$(this.idStoreClosed).removeClassName('hidden');
		}
	},
	
	/**
	 * Muestra el texto Solo en la campanya Hoy estrenamos .
	 */
	showTextOnly: function(dataJson, target) {
		if ( (target == "campaigns_today") || (target == "campaigns_fanshop") ){
			dataJson.textonly = "";
			dataJson.icotoday = "ico-time-today-16";
		}
		else {
			dataJson.textonly = "hidden";
		}
		return dataJson;
	},

	/**
	 * Muestra enlace Ir de Shopping o Entrar en Fan Shop
	 */
	showBtnTxtFanShop: function(dataJson, target) {
		if ( target == "campaigns_fanshop" ){
			dataJson.btnTxtFanShop = "";
			dataJson.btnTxtShopping = "hidden";
		}
		else {
			dataJson.btnTxtFanShop = "hidden";
			dataJson.btnTxtShopping = "";
		}
		return dataJson;
	},
	
	
	
	/**
	 * Metodo que aplica los contadores de tiempo para las campanyas,
	 * previo volcado de los containers donde deberan ir situados
	 */
	setCampaignTimers: function(){
		var i_campaignCounter = 0;

		// Seteamos los contadores para las campanyas que estrenamos hoy
		if (this.getAjaxData().campaigns_today !== []) {
			this.getAjaxData().campaigns_today.each(function(item){
				if ($('campaign-timer-' + i_campaignCounter) !== null) {
					this.setTimer(item.campaign_expires, 'campaign-timer-' + i_campaignCounter);
					i_campaignCounter += 1;
				}
			}, this);
		}
		// Seteamos los contadores para las campanyas activas
		if (this.getAjaxData().campaigns_active !== []) {
			this.getAjaxData().campaigns_active.each(function(item){
				if($('campaign-timer-' + i_campaignCounter)!== null){
					this.setTimer(item.campaign_expires , 'campaign-timer-' + i_campaignCounter);
					i_campaignCounter += 1;
				}
			}, this);
		}
		// Seteamos los contadores para las campanyas que cierran hoy
		if(this.getAjaxData().campaigns_lastday !== []){
			this.getAjaxData().campaigns_lastday.each(function(item){
				if ($('campaign-timer-' + i_campaignCounter) !== null) {
					this.setTimer(item.campaign_expires , 'campaign-timer-' + i_campaignCounter);
					i_campaignCounter += 1;
				}
			}, this);
		}

	},

	/**
	 * Metodo que aplica el contador con el tiempo indicado al id indicado
	 * @param {Object} remain - tiempo restante
	 * @param {Object} id - container donde ha de mostrarse el contador
	 */
	setTimer: function(remain, id){
		if($(id)!== null){
			var countdown = $(id);
			// configuramos el intervalo de la cuenta atras
			timer = setInterval( (function () {
				// insertamos el reloj en el formato configurado, con dias y horas
				countdown.innerHTML = this.getExpiresTime (remain, 1);
				// si el tiempo restante es menor a 0 ocultamos el contador
				if (remain-- <= 0){
					clearInterval(timer);
					$(id).addClassName("hidden");
				}
			// este integer es el intervalo normal de tiempo
			}).bind(this),1000);
		}
	},
	
	/**
	 * Microsites - Metodo para mostrar el mensaje del usuario debajo del header
	 */
	setUserMsg: function(data){
		//si no hay texto oculta el div
		if(data.output_content.plain_text !== ''){
			$(this.idUserMsg).removeClassName('hidden');
		}
	},
	/**
	 * Muestra el bloque de Proximas Campanyas
	 */
	showIncomingCampaigns: function(){
		if( $(this.idNextCampaigns) !== null){
			$(this.idNextCampaigns).removeClassName('hidden');
		}
	},	

	/**
	 * Muestra el orden de la seccion segun nos pasen en el objeto order
	 */
	showOrderSection: function(data) {
		if ( !Object.isUndefined(data.order) && ( $(this.idOrderZonaMobile) != null ) && ( $(this.idOrderSocialMedia) != null ) ){
			var htmlMobileZone = $(this.idOrderZonaMobile).innerHTML;
			var htmlSocialMedia = $(this.idOrderSocialMedia).innerHTML;
			
			if (this.idOrderSocialMedia == data.order){	
				this.transferAsideSection(htmlSocialMedia, htmlMobileZone);
			}
			else if (this.idOrderZonaMobile == data.order ) {
				this.transferAsideSection(htmlMobileZone, htmlSocialMedia);
			}
			else {
				//CASOS ESPECIALES: order vacio o order con texto diferente de "order_mobile_zone o order_social_media"				
				this.transferAsideSection(htmlSocialMedia, htmlMobileZone);
			}			
		}
	},	
	
	/**
	 * Mostrar los enlaces 
	 * TODO: IE cuando el volcado tiene el title vacio devuelve el href
	 * EJEMPLO: 
	 *  FIREFOX: <a class="json4_link hidden aside_link" target="" title="" href="javascript:void(0);"> ></a>
		IE: FIREFOX: <a class="json4_link hidden aside_link" target="" title='href="javascript:void(0);"' href="javascript:void(0);"> ></a>
	 */
	showLinks: function () {		
		var v_links = $$(this.classAsideLink);
		if ( (v_links != null) && (v_links.length != 0) ) {		
			var type_navegator_ie = this.checkUserAgent("msie");
			v_links.each(function (item){
				//Esta condicion es solo para internet explorer. Se especifica el navegador porque en el volcado del title vacio
				//IE devuelve el contenido del href, es decir href="javascript:void(0);"
				if (type_navegator_ie){
					//Se anyade en IE otra condicion porque cuando el volcado esta vacio devuelve el title con 'href="javascript:void(0);"'
					if( (item.title != "") && (item.title!='href="javascript:void(0);"') ){
						if (item.hasClassName("aside_link")) {						
							$(item).removeClassName('hidden');
						}
					}
				}
				else {
					if (item.title != ""){
						if (item.hasClassName("aside_link")) {						
							$(item).removeClassName('hidden');
						}
					}
				}
			});	
		}		
	},
	
	/**
	 * Gestiona el estilo del titulo de la seccion. Con enlace o si enlace
	 * @param {Array} v_keys
	 * @param {Object} oValues
	 */
	showHeader: function (dataJson, v_keys, oValues) {
		var i=0;
		var enc= false;		
		while (i < v_keys.length && !enc){				
			if (v_keys[i] == "header") {
				enc = true;
				var s_url = oValues[i].url;
			
				if (s_url != ""){
					dataJson.showTitle =  "hidden";
				}
				else {
					dataJson.showTitleLink =  "hidden";
				}
			}
		}		
	},
	
	/**
	 * Volcado datos modal promociones 
	 */
	transferModalPromotion: function (dataJson){
		if (!Object.isUndefined(dataJson.member_actions)){
			// Si la promocion esta activada, mostramos la modal
			if (dataJson.member_actions.member_action_modal){
				
				var s_membername = dataJson.member_actions.member_name;

				//volcar datos en la modal
				this._buildModalPromotion(s_membername);
				
				//abrir modal
				this.modalPromotion.open();
				
			}
		}
	},
	
	/**
	 * Gestiona la seccion lateral
	 * @param {Object} html1
	 * @param {Object} html2
	 */
	transferAsideSection: function(html1, html2) {
		if (html1 != ""){
			$(this.idOrderSocialMedia).removeClassName('hidden');
			$(this.idOrderSocialMedia).update(html1);
		}
				
		if (html2 != ""){
			$(this.idOrderZonaMobile).removeClassName('hidden');
			$(this.idOrderZonaMobile).update(html2);
		}
	},
		
	
	/**
	 * Metodo para transferir la url de las imagenes al tooltip
	 * @param {Object} campaignLogoPosition
	 */
	transferLogoTooltipInfo: function(campaignLogoPosition){
		//Recuperamos la informacion desde el array de los logos
		var imgSrc = this.v_logoImgs[campaignLogoPosition];
				
		if($('tooltip-logo')!== null){
			$('tooltip-logo').writeAttribute("src", imgSrc);
		}
	},
	
	
	/**
	 * Volcado informacion de la modal
	 */
	_buildModalPromotion: function (s_member){
		//quitar espacios
		var s_name = this.trim(s_member);
		//anyadir la coma
		s_name = s_name + ", ";
		//volcar nombre socio
		if ( $(this.idMemberName) != null ) {
			$(this.idMemberName).update(s_name);
		}
		//volcar enlace escaparate
		if ( $(this.idLinkMicrosite) != null ){			
			$(this.idLinkMicrosite).href = this.url_microsite;			
		}
	},
	
	/**
	 * Metodo que itera sobre las campanyas que se lanzaran en horas determinadas
	 * @param {Object} v_campaigns
	 */
	_getIncomingCampaigns: function(v_campaigns, hourPosition){

		var list = '',
		elements = '',
		tplFSIncoming = new Template(TPL_FANSHOP_CAMPAIGN),
		tplIncoming = new Template(TPL_INCOMING_CAMPAIGN);

		// Volcamos las campanyas, en funcion si son de fanshop o normales
			elements = '';
			if(v_campaigns.fanshop == 'true'){
				elements = tplFSIncoming.evaluate({
					campaign_name: v_campaigns.name,
					fanshop_copy: this.getTxt('fanshop'),
					url: v_campaigns.url,
					campaign_number: this.i_campaignCounter
				});
			}else{
				elements = tplIncoming.evaluate({
					campaign_name: v_campaigns.name,
					campaign_number: this.i_campaignCounter
				});
			}
			// Asociamos el contador de campanyas con el array donde se guardaran los logos
			this._setCampaignLogo(this.i_campaignCounter, v_campaigns.logo)
			this.i_campaignCounter ++;
			list += elements;
		return list;
	},

	/**
	 * Metodo que introduce las urls de las imagenes en el array donde se almacenaran
	 * @param {Object} campaignCounter
	 * @param {Object} url_logo
	 */
	_setCampaignLogo: function(campaignCounter, url_logo){
		if(campaignCounter !== '' && url_logo !== ''){
			this.v_logoImgs[campaignCounter] =  url_logo;
		}
	},

	/**
	 * Metodo para mostrar el mensaje del Fanshop
	 */
	_setUpLogoTooltip: function(type){
		if(type === 'fanshop-campaign'){
			if($('fanshop-msg')!== null){
				$('fanshop-msg').removeClassName('hidden');
			}
		}else{
			if($('fanshop-msg')!== null){
				$('fanshop-msg').addClassName('hidden');
			}
		}
	}

});



